# ===== 构建阶段 =====
# 使用清华大学镜像源的Python 3.11 slim镜像作为构建阶段
FROM python:3.11-slim AS builder

# 设置工作目录
WORKDIR /app

# 配置apt使用清华大学镜像源
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources

# 安装构建依赖（包括Nuitka所需的系统依赖）
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    git \
    ccache \
    patchelf \
    && rm -rf /var/lib/apt/lists/*

# 配置pip使用清华大学镜像源
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 复制依赖文件（先复制依赖文件以利用缓存）
COPY requirements.txt .

# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件（先复制项目文件以便安装）
COPY . .

# 复制宿主机创建的入口文件
COPY entry_point.py /app/entry_point.py

# 安装项目到本地
RUN pip install -e .

# 安装Nuitka
RUN pip install --no-cache-dir nuitka

# 使用Nuitka打包入口文件
RUN python -m nuitka \
    --standalone \
    --onefile \
    --output-dir=dist \
    --include-package=database_backup \
    --assume-yes-for-downloads \
    /app/entry_point.py

# ===== 运行阶段 =====
# 使用与构建阶段相同的基础镜像以确保库兼容性
FROM python:3.11-slim AS runtime

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1

# 配置apt使用清华大学镜像源
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources

# 安装运行时依赖
RUN apt-get update && apt-get install -y \
    git \
    mariadb-client \
    postgresql-client \
    libpq5 \
    libmariadb3 \
    libssl3 \
    libcrypt1 \
    && rm -rf /var/lib/apt/lists/*

# 设置Git用户名和邮箱的环境变量（默认值）
ENV GIT_USERNAME="database-backup-tool"
ENV GIT_EMAIL="backup@localhost"

# 配置Git凭据存储（记住HTTP账号密码）- 必须执行
RUN git config --global credential.helper store
RUN git config --global http.sslVerify false

# 从构建阶段复制Nuitka打包的可执行文件
COPY --from=builder /app/dist/entry_point.bin /app/dbbackup

# 从构建阶段复制配置文件模板（如果存在）
COPY --from=builder /app/configs /app/configs

# 创建备份目录
RUN mkdir -p /app/backups

# 设置可执行权限
RUN chmod +x /app/dbbackup

# 暴露端口（如果需要Web界面）
# EXPOSE 8080

# 设置入口点
ENTRYPOINT ["/app/dbbackup"]

# 默认命令显示帮助
CMD ["--help"]